package elementi;

import java.awt.Color;

import elementi.giocatori.Giocatore;

import audio.AudioPlayer;
import gioco.FactoryProxy;
import gioco.GestoreElementi;
import grafica.GraficaProxy;

public class Bomba extends ElementoMobile implements Esplosivo,Temporizzato,Interattivo {
GestoreElementi gestoreElementi = GestoreElementi.getGestoreElementi();

	private static final int VELOCITA_BOMBA = 2;
	public static final int RAGGIO_BOMBA = 10;
	
	private int dannoBomba = 2;
	private int timer = 200;
	private int esplosa = 0;
	
	public Bomba(float x, float y ,float seno, float coseno){
		reset(x, y, seno, coseno);
	}
	
	public void reset(float x, float y ,float seno, float coseno){
		setX(x);
		setY(y);
		setForma(FactoryProxy.getFactoryForme().creaCerchio(RAGGIO_BOMBA, Color.BLACK));
		setVelocitax((VELOCITA_BOMBA*coseno));
		setVelocitay((VELOCITA_BOMBA*seno));
		timer = 200;
		esplosa = 0;
		setDannoBomba(2);
	}


	@Override
	public void notificaCollisione(Elemento e) {
		if (esplosa == 0)
			esplodi();
		else 
			if (esplosa == 2) esplosa ++;
		else 
			setDannoBomba(0);
	}

	@Override
	public void disegnaElemento() {
		GraficaProxy.getSingleton().disegnaElementoCircolare(this);
	}
	
	@Override
	public int getDanno() {
		return getDannoBomba();
	}
	
	@Override
	public void tickTemporizzato(){
		timer--;
		if(timer == 100) {	
			this.setVelocitax(0);
			this.setVelocitay(0);
		}if(timer == 0) 
			esplodi();
		if(timer == -50) 
			GestoreElementi.getGestoreElementi().rimuoviBomba(this);
		
	}
	
	private void esplodi(){

		/* Chi � l'autore di queste righe di codice 
		 * impilate una dietro l'altra?
		 * Diamine, l'avete fatta proprio sporca la seconda gara...
		 * Mettele a posto, che sono un casino da debuggare..
		 * il Prof
		 */
		if(timer > 0) timer = 0;
		AudioPlayer.suonaBomba();
		setVelocitax(0);
		setVelocitay(0);
		this.setForma(FactoryProxy.getFactoryForme().creaCerchio(30,Color.ORANGE));
		esplosa ++;
	}

	public void setDannoBomba(int dannoBomba) {
		this.dannoBomba = dannoBomba;
	}

	public int getDannoBomba() {
		return dannoBomba;
	}

	@Override
	public void eseguiInterazione(Giocatore giocatore) {
		giocatore.togliVita(getDanno());
		
	}
}